package com.sctvcloud.linshui.im;

import java.io.File;
import java.util.List;

import cn.jpush.im.android.api.ChatRoomManager;
import cn.jpush.im.android.api.JMessageClient;
import cn.jpush.im.android.api.callback.RequestCallback;
import cn.jpush.im.android.api.model.ChatRoomInfo;
import cn.jpush.im.android.api.model.Conversation;
import cn.jpush.im.android.api.model.UserInfo;
import cn.jpush.im.android.api.options.RegisterOptionalUserInfo;
import cn.jpush.im.api.BasicCallback;

/**
 * 极光IM 接口管理类
 */
public class ImInterface {

    public static ImInterface instance;


    public ImInterface() {

    }

    public static ImInterface getInstance() {
        if (null == instance) {
            instance = new ImInterface();
        }
        return instance;
    }

    /**
     * Im 用户注册
     *
     * @param username
     * @param password
     * @param nickName
     * @param avatarIcon
     * @param callback
     */
    public void imUserRegister(String username, String password, String nickName, String avatarIcon, BasicCallback callback) {
        RegisterOptionalUserInfo info = new RegisterOptionalUserInfo();
        info.setNickname(nickName);
        info.setAvatar(avatarIcon);
        JMessageClient.register(username, password, info, callback);
    }

    /**
     * 用户登录
     *
     * @param username
     * @param password
     * @param callback
     */
    public void imUserLogin(String username, String password, BasicCallback callback) {
        JMessageClient.login(username, password, callback);
    }

    /**
     * IM 退出登陆
     */
    public void imUserLogout() {
        JMessageClient.logout();
    }

    /**
     * 更新用户信息
     *
     * @param updateField
     * @param info
     * @param callback
     */
    public void imUpdateInfo(UserInfo.Field updateField, UserInfo info, BasicCallback callback) {
        JMessageClient.updateMyInfo(updateField, info, callback);
    }

    /**
     * 更新用户头像
     *
     * @param avatar
     * @param callback
     */
    public void imUpdateUserAvatar(File avatar, BasicCallback callback) {
        JMessageClient.updateUserAvatar(avatar, callback);
    }

    /**
     * 更新用户昵称
     *
     * @param info
     * @param callback
     */
    public void imUpdateInfoNickName(UserInfo info, BasicCallback callback) {
        JMessageClient.updateMyInfo(UserInfo.Field.nickname, info, callback);
    }

    /**
     * 获取当前应用appkey所属下聊天室信息列表。
     *
     * @param index    页码
     * @param index    获取个数
     * @param callback 接口回调
     * @since 2.4.0
     */
    public void getChatRoomList(int index, int size, RequestCallback<List<ChatRoomInfo>> callback) {
        int start = index * size;
        int count = size;
        ChatRoomManager.getChatRoomListByApp(start, count, callback);
    }

    /**
     * 进入聊天室.
     * 用户只有成功调用此接口之后，才能收到聊天室消息，以及在此聊天室中发言。
     * 成功进入聊天室之后，会将聊天室中最近若干条聊天记录同步到本地并以{@link cn.jpush.im.android.api.event.ChatRoomMessageEvent}事件的形式通知到上层。
     *
     * @param roomID   聊天室的roomID
     * @param callback 接口回调
     * @since 2.4.0
     */
    public void imJoinChatRoom(long roomID, final RequestCallback<Conversation> callback) {
        ChatRoomManager.enterChatRoom(roomID, callback);
    }

    /**
     * 离开聊天室.
     * 成功调用此接口之后，用户将能不在此聊天室收发消息。
     *
     * @param roomID   聊天室的roomID
     * @param callback 接口回调
     * @since 2.4.0
     */
    public void imLeaveChateRoom(long roomID, final BasicCallback callback) {
        ChatRoomManager.leaveChatRoom(roomID, callback);
    }

    /**
     * 获取当前登录的用户信息
     *
     * @return 用户信息
     */
    public UserInfo getMyUserInfo() {
        UserInfo info = JMessageClient.getMyInfo();
        return info;
    }

}
